home *** CD-ROM | disk | FTP | other *** search
- situation fleet_move
- vars
- me : fleet;
- f_fleet : fleet;
- t_fleet : fleet;
- angle : integer;
- t_dist : integer;
- success : boolean;
- f_planet : planet;
- t_planet : planet;
- p_race : integer;
-
- begin
- // This section will be easier to write when the attachments are done
- me := This_fleet();
- // See if you can find any enemy fleets
- t_fleet := nil;
- f_fleet := First_fleet(-1);
- while (f_fleet <> nil) do
- begin
- if (Get_fleet_race(f_fleet) <> Get_fleet_race(me)) then
- begin
- if (t_fleet = nil) then
- t_fleet := f_fleet;
- else
- if (Distance(Get_fleet_x(me), Get_fleet_y(me),
- Get_fleet_x(f_fleet), Get_fleet_y(f_fleet)) <
- Distance(Get_fleet_x(me), Get_fleet_y(me),
- Get_fleet_x(t_fleet), Get_fleet_y(t_fleet))) then
- t_fleet := f_fleet;
- end;
- f_fleet := Next_fleet(f_fleet, -1);
- end;
- if (t_fleet <> nil) then
- begin
- // We've found a ship to go after so head toward it
- while (Fleet_mp(me) > 0) do
- begin
- angle := Target_to_angle(Get_fleet_x(me), Get_fleet_y(me),
- Get_fleet_x(t_fleet), Get_fleet_y(t_fleet));
- t_dist := Distance(Get_fleet_x(me), Get_fleet_y(me),
- Get_fleet_x(t_fleet), Get_fleet_y(t_fleet));
- if (t_dist = 1) then
- begin
- // Attack enemy fleet
- success := Attack_fleet(angle);
- if (not success) then
- Skip();
- end;
- else
- begin
- success := Move_fleet(angle);
- if (not success) then
- Skip();
- end;
- end;
- end;
- else
- begin
- // Look for an enemy planet to attack
- t_planet := nil;
- f_planet := First_planet(-1);
- while (f_planet <> nil) do
- begin
- p_race := Planet_race(f_planet);
- if (p_race = -1) then
- begin
- // This planet has not yet been explored, head toward it
- t_planet := f_planet;
- end;
- else if ((p_race <> Get_fleet_race(me)) and
- (p_race <> 100)) then
- begin
- if (t_planet = nil) then
- // Only make the target world an enemy world if you have no world seleted yet
- t_planet := f_planet;
- end;
- f_planet := Next_planet(f_planet, -1);
- end;
- if (t_planet <> nil) then
- begin
- // Head toward target planet
- while (Fleet_mp(me) > 0) do
- begin
- angle := Target_to_angle(Get_fleet_x(me), Get_fleet_y(me),
- Planet_x(t_planet), Planet_y(t_planet));
- t_dist := Distance(Get_fleet_x(me), Get_fleet_y(me),
- Planet_x(t_planet), Planet_y(t_planet));
- if (t_dist = 1) then
- begin
- // Attack enemy planet
- if ((Planet_race(t_planet) <> Get_fleet_race(me)) and
- (Planet_race(t_planet) <> 100)) then
- begin
- success := Attack_fleet(angle);
- if (not success) then
- Skip();
- end;
- else
- Skip();
- end;
- else
- begin
- success := Move_fleet(angle);
- if (not success) then
- Skip();
- end;
- end;
- end;
- else
- begin
- // No target planet and no target fleet, head toward a random point
- while (Fleet_mp(me) > 0) do
- begin
- angle := Random(6);
- success := Move_fleet(angle);
- if (not success) then
- Skip();
- end;
- end;
- end;
- end;
-
-
-